package com.ihrm.system.service;

import com.ihrm.common.service.BaseService;
import com.ihrm.common.utils.IdWorker;
import com.ihrm.common.utils.PermissionConstants;
import com.ihrm.domain.system.Permission;
import com.ihrm.domain.system.Role;
import com.ihrm.system.dao.PermissionDao;
import com.ihrm.system.dao.RoleDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @auther chongxiongwei
 * @create 2020-04-19-21:09
 */
@Service
public class RoleService extends BaseService {

    @Autowired
    private RoleDao roleDao;
    @Autowired
    private IdWorker idWorker;
    @Autowired
    private PermissionDao permissionDao;

    /**
     * 分配权限
     */
    public void assignPerms(String roleId, List<String> permIds){
        //1.获取分配的角色对象
        Role role = roleDao.findById(roleId).get();
        //2.构造角色的权限集合
        Set<Permission> permissions = new HashSet<>();
        //3.设置角色和权限关系
        for (String permId : permIds) {
            Permission permission = permissionDao.findById(permId).get();
            // 根据父id和类型查询API权限列表
            List<Permission> apiList = permissionDao.findByTypeAndPid(PermissionConstants.PY_API, permission.getId());
            permissions.addAll(apiList);// 自定赋予API权限
            permissions.add(permission);// 当前菜单或按钮的权限
        }
        role.setPermissions(permissions);
        //4.更新角色
        roleDao.save(role);

    }


    /**
     * 保存角色
     */
    public void save(Role role){
        String roleId = idWorker.nextId()+"";
        role.setId(roleId);
        roleDao.save(role);
    }

    /**
     * 更改角色
     */
    public void update(Role role){
        Role temp = roleDao.findById(role.getId()).get();
        temp.setName(role.getName());
        temp.setDescription(role.getDescription());
        roleDao.save(temp);
    }

    /**
     * 删除角色
     */
    public void delete(String id){
        roleDao.deleteById(id);

    }

    /**
     * 根据角色ID查询角色信息
     */
    public Role findById(String id){
        return roleDao.findById(id).get();
    }

    /**
     * 根据公司ID查询全部角色
     */
    public Page<Role> findByPage(String companyId, int page, int size){
        return roleDao.findAll(getSpec(companyId), PageRequest.of(page-1, size));
    }
    public List<Role> findAll(String companyId) {
        return roleDao.findAll(getSpec(companyId));
    }
}
